package Test28;

import java.math.BigInteger;

//BigInteger类的使用（构造方法）
/*
public BigInteger(int num,Random rnd)       获取随机大整数，范围:[0 ~ 2的num次方-1]
public BigInteger( string val)              获取指定的大整数
public BigInteger( string val, int radix)   获取指定进制的大整数

public static BigInteger valueOF(long val)  静态方法获取BigInteger的对象，内部有优化
细节:
    对象一旦创建里面的数据不能发生改变。
 */
public class Test12 {
    public static void main(String[] args) {

        /*//1、获取随机大整数
        Random r = new Random();
        for (int i = 0; i < 100; i++) {
            BigInteger bd1 = new BigInteger(4, r);
            System.out.println(bd1);
        }*/

        /*//2、获取一个指定的字符串
        //细节：字符串中必须为整数，否则会报错
        BigInteger bd2 = new BigInteger("9999999999999999999999");
        System.out.println(bd2);

        BigInteger bd3 = new BigInteger("1.1");
        System.out.println(bd3);

        BigInteger bd4 = new BigInteger("abc");
        System.out.println(bd4);*/

        /*//3、获取指定进制的大整数
        //细节：
        //（1）字符串中的数字必须是整数
        //（2）字符串中的数字必须要跟进制吻合
        //比如二进制中，那么只能写0和1，写其他的就会报错

        BigInteger bd5 = new BigInteger("100", 10);
        System.out.println(bd5);

        BigInteger bd6 = new BigInteger("100", 2);
        System.out.println(bd6);

        BigInteger bd7 = new BigInteger("123", 2);
        System.out.println(bd7);*/

        /*//4、静态方法获取BigInteger的对象，内部有优化
        //细节：
        //（1）能表示的范围比较小，只能在long的取值范围之内，如果超出long的范围就不行了。
        //（2）在内部对常用的数字：-16~16进行了优化。
        //     提前把-16~16 先创建好BigInteger的对象，如果多次获取不会重新创建新的。
        BigInteger bd8 = BigInteger.valueOf(9223372036854775807L);
        System.out.println(bd8);

        //BigInteger bd9 = BigInteger.valueOf(9223372036854775808L);
        //System.out.println(bd9);

        BigInteger bd10 = BigInteger.valueOf(16);
        BigInteger bd11 = BigInteger.valueOf(16);
        System.out.println(bd10 == bd11);//true

        BigInteger bd12 = BigInteger.valueOf(17);
        BigInteger bd13 = BigInteger.valueOf(17);
        System.out.println(bd12 == bd13);//false*/

        //5、对象一旦创建内部的数据不能发生改变
        BigInteger bd14 = BigInteger.valueOf(1);
        BigInteger bd15 = BigInteger.valueOf(2);
        BigInteger resule = bd14.add(bd15);
        System.out.println(resule);
        //此时，不会修改参与计算的BigInteger对象中的值，而是产生了一个新的BigInteger对象记录3

        System.out.println(bd14 == resule);//false
        System.out.println(bd15 == resule);//false
        System.out.println(bd14 == bd15);//false

    }
}
